/*
 * UsuarioFacadeBean.java
 *
 * Created on 21 de Maio de 2007, 23:44
 *
 */

package net.sf.jOpinionPoll.facade.impl;

import java.util.List;

import net.sf.jOpinionPoll.dao.ConteudoDao;
import net.sf.jOpinionPoll.dao.PapelDao;
import net.sf.jOpinionPoll.dao.UsuarioDao;
import net.sf.jOpinionPoll.entity.Conteudo;
import net.sf.jOpinionPoll.entity.Papel;
import net.sf.jOpinionPoll.entity.Usuario;
import net.sf.jOpinionPoll.facade.UsuarioFacade;

import org.acegisecurity.context.SecurityContext;
import org.acegisecurity.context.SecurityContextHolder;
import org.acegisecurity.userdetails.User;

import org.springframework.dao.EmptyResultDataAccessException;

/**
 *
 * @author erico
 */
@SuppressWarnings("unchecked")
public class UsuarioFacadeImpl implements UsuarioFacade {
    private UsuarioDao m_UsuarioDao;
    private PapelDao m_PapelDao;
    private ConteudoDao m_ConteudoDao;
    
	public void setUsuarioDao(UsuarioDao usuarioDao) {
		m_UsuarioDao = usuarioDao;
	}
	
	public void setPapelDao(PapelDao papelDao) {
		m_PapelDao = papelDao;
	}
	
	public void setConteudoDao(ConteudoDao conteudoDao) {
		m_ConteudoDao = conteudoDao;
	}
    
	@Override
    public boolean existsUsuario(String id) {
        try {
            return m_UsuarioDao.findFetchByPk(id) != null;
        } catch(EmptyResultDataAccessException ex) {
            return false;
        }
    }
    
	@Override
    public boolean existsEmail(String email) {
    	return m_UsuarioDao.existsEmail((String)email);
    }
    
	@Override
    public boolean existsCPFCNPJ(String cpfcnpj) {
    	return m_UsuarioDao.existsCPFCNPJ((String)cpfcnpj);
    }
	
	@Override
	public Usuario findFetchByPk(String id) {
		return m_UsuarioDao.findFetchByPk(id);
	}
 
	@Override
    public void add(Usuario usuario) {
       	m_UsuarioDao.add(usuario);
    }
	
	@Override
	public List<Papel> listPapeis() {
		return m_PapelDao.list();
	}
    
    @Override
    public Papel getPapel(String nome) {
        return m_PapelDao.findByPk(nome);
    }
    
    @Override
    public Usuario getUsuarioLogado() {
        SecurityContext securityContext = SecurityContextHolder.getContext();
        User acegiUser = (User) securityContext.getAuthentication().getPrincipal();

        return findFetchByPk(acegiUser.getUsername());
    }

	@Override
	public List<Conteudo> listConteudo() {
		return m_ConteudoDao.list();
	}
}